# _*_conding:cp-1252-*-
# 教育机构：银杰教育
# 讲师：李伟
# 开发时间：2025/8/28 下午9:40
# 继承好处是可以自己不努力，靠继承过来很多财富。也可以很厉害。
# 代码继承： 程序员不想把所有的代码从0开始写。之前写过一些代码直接用。【复制可以，但是不推荐，因为代码冗余】
#
# 新能源车需要有车的所有的属性和方法 那么不需要自己从0开始写，继承车类。
# 语法： 在类名字后加上（继承的类名字）
#
# 继承之后可以使用父类的所有的属性和方法【类 实例】
#
# 子类也可以有自己的方法- 定义实例方法
# - 子类的对象可以调用子类的方法
# - 父类的对象不可以调用子类的方法和属性
#
# 问题： 子类和父类有相同的名字的方法，优先用谁的么？
# - 优先使用自己方法 ，就近原则。
# - 重写了父类的方法。
#
# 多层继承
# 多重继承
# 动态属性
#
# """
# class Car:
#     wheel = "True"
#     engine = "True"
#     def __init__(self,cl="黑色",lg="法拉利"): # 参数- 形参,变量，跟属性名没有任何关系
#         self.color = cl  # 实例属性，实例方法里可以调用-共享
#         self.logo = lg
#         print("正在生成一辆车...")
#
#     # 定义实例方法 -- 函数 def
#     def driving(self): # 默认加self 表示这是一个实例方法--self就是对象本身
#         print("正在开车...")
#         print(f"开的车的颜色是{self.color}，开的车logo是{self.logo}")  # 通过self调用实例属性
#         # 调用充电的方法 --self调用
#         self.recharge()
#
#     # 定义实例方法 -- 函数 def
#     def recharge(self):
#         print("正在加油充电...")
#         print(f"加油的车的颜色是{self.color}",self.wheel) # 实例方法里调动类属性 self.wheel
# # # 新能源车的类-- 继承Car类
# class NewEnergyCar(Car):
#     # 定义子类的实例方法
#     def save_money(self):
#         print("新能源车可以省钱...")
#     def recharge(self):
#         print("新能源车只能充电...")


# 新能源车的对象
# new_car = NewEnergyCar()
# print(new_car.wheel)  # 父类的类属性获取
# # print(new_car.color)  # 父类的实例属性获取
# new_car.driving() # 父类的实例方法获取
# new_car.save_money() # 调用子类自己的实例

# 父类对象 --不能调用子类的方法
# my_car = Car()
# my_car.save_money()
#
# # 子类调用 跟跟父类的方法 【子类和父类】
# new_car.recharge()

# 第一层类
class Car:
    wheel = "True"
    engine = "True"
    def __init__(self,cl="黑色",lg="法拉利"): # 参数- 形参,变量，跟属性名没有任何关系
        self.color = cl  # 实例属性，实例方法里可以调用-共享
        self.logo = lg
        print("正在生成一辆车...")

    # 定义实例方法 -- 函数 def
    def driving(self): # 默认加self 表示这是一个实例方法--self就是对象本身
        print("正在开车...")
        print(f"开的车的颜色是{self.color}，开的车logo是{self.logo}")  # 通过self调用实例属性
        # 调用充电的方法 --self调用
        self.recharge()

    # 定义实例方法 -- 函数 def
    def recharge(self):
        print("正在加油充电...")
        print(f"加油的车的颜色是{self.color}",self.wheel) # 实例方法里调动类属性 self.wheel

# 第二层类 新能源车的类-- 继承Car类
class NewEnergyCar(Car):
    # 定义子类的实例方法
    def save_money(self):
        print("新能源车可以省钱...")
    def recharge(self):
        print("新能源车只能充电...")

# 第三层类：多层继承
# class AutoCar(NewEnergyCar):
#     pass


# 机器人的类
class Robot:
    def ai(self):
        print("自动语言识别的方法...")

# 播放音乐的类
class MusicPlayer:
    def play_music(self):
        print("play music...")

# 第三层类：多重继承 -- 多个类同时继承
class AutoCar(NewEnergyCar,Robot,MusicPlayer):
    pass



# 自动车的对象 == 可以使用父类 所有上级类的方法和属性。
auto_car = AutoCar()
auto_car.save_money()
auto_car.play_music()
auto_car.ai()
